/**
 * @file ice_cream_types.h
 * @brief 冰淇淋机控制相关类型定义
 */
#ifndef ICE_CREAM_TYPES_H
#define ICE_CREAM_TYPES_H

#include "sys_pub.h"

// 错误代码定义
typedef enum {
    ERROR_NONE,
    ERROR_HOMING_FAILED,
    ERROR_CUP_NOT_DETECTED,
    ERROR_AXIS_MOVE_TIMEOUT,
    ERROR_MILK_DISPENSE_FAILED,
    ERROR_JAM_DISPENSE_FAILED,
    ERROR_TOPPING_DISPENSE_FAILED,
    ERROR_DOOR_CONTROL_FAILED,
    ERROR_JAM_TYPE_INVALID,
    ERROR_TOPPING_TYPE_INVALID,
    ERROR_MAX
} ErrorCode;

// 双轴位置结构体
typedef struct {
    int16_t x_pos;  // X轴位置(脉冲数)
    int16_t z_pos;  // Z轴位置(脉冲数)
} AxisPosition;

// 奶浆参数结构体
typedef struct {
    AxisPosition fill_pos;        // 加注位置
    uint16_t fill_time_ms;        // 加注时间(ms)
    uint16_t complete_delay_ms;   // 完成延时(ms)
    uint8_t remain_cup_count;
    uint8_t material_low_remaining_cups; // 原料欠料后可售杯数
} MilkParams;

// 果酱参数结构体
typedef struct {
    uint8_t type;                 // 果酱类型(1-3)
    AxisPosition add_pos;         // 添加位置
    uint16_t add_time_ms;         // 添加时间(ms)
    uint16_t complete_delay_ms;   // 完成延时(ms)
    uint8_t remain_cup_count;
} JamParams;

// 顶料参数结构体
typedef struct {
    uint8_t type;                 // 顶料类型(1-3)
    AxisPosition add_pos;         // 添加位置
    uint16_t add_time_ms;         // 添加时间(ms)
    uint16_t complete_delay_ms;   // 完成延时(ms)
    uint8_t remain_cup_count;
} ToppingParams;

// 生产配置参数
typedef struct {
    AxisPosition cup_drop_pos;    // 取杯位置
    AxisPosition dispense_pos;    // 取餐位置
    MilkParams milk;              // 奶浆参数
    uint8_t jam_count;            // 果酱数量(0-3)
    JamParams jams[3];            // 果酱参数数组
    uint8_t topping_count;        // 顶料数量(0-3)
    ToppingParams toppings[3];    // 顶料参数数组
    uint16_t manual_speed_xz[2];      // X轴手动速度（单位根据实际需求定义，如mm/s））
} ProductionConfig;

// 系统状态枚举
typedef enum {
    SYSTEM_IDLE,
    SYSTEM_RUNNING,
    SYSTEM_ERROR,
    SYSTEM_COMPLETE
} SystemState;

// 制作流程状态枚举
typedef enum {
    PROCESS_IDLE,           // 空闲状态
    PROCESS_INIT,           // 初始化
    PROCESS_HOMING,         // 原点回归
    PROCESS_DROP_CUP,       // 落杯
    PROCESS_MOVE_TO_MILK,   // 移动到奶浆位置
    PROCESS_FILL_MILK,      // 加注奶浆
    PROCESS_MILK_DELAY,     // 奶浆完成延时
    PROCESS_MOVE_TO_JAM,    // 移动到果酱位置
    PROCESS_ADD_JAM,        // 添加果酱
    PROCESS_JAM_DELAY,      // 果酱完成延时
    PROCESS_MOVE_TO_TOPPING,// 移动到顶料位置
    PROCESS_ADD_TOPPING,    // 添加顶料
    PROCESS_TOPPING_DELAY,  // 顶料完成延时
    PROCESS_MOVE_TO_DISPENSE,// 移动到取餐位置
    PROCESS_OPEN_DOOR,      // 打开取餐门
    PROCESS_WAIT_TAKEAWAY,  // 等待取餐
    PROCESS_CLOSE_DOOR,     // 关闭取餐门
    PROCESS_COMPLETE,       // 制作完成
    PROCESS_ERROR,          // 错误状态
    PROCESS_STATE_COUNT     // 状态总数
} ProcessState;

// 状态处理函数类型定义

#endif // ICE_CREAM_TYPES_H
    